package com.tripcube.system.mapper;

import com.tripcube.system.domain.SysUserCheckins;
import com.tripcube.system.domain.vo.CheckinVO;

import java.math.BigDecimal;
import java.util.List;

/**
* @author alander
* @description 用户打卡记录表Mapper
* @createDate 2025-09-24 21:45:13
*/
public interface SysUserCheckinsMapper {

    /**
     * 查询用户打卡记录列表
     * 
     * @param checkins 打卡记录对象
     * @return 打卡记录列表
     */
    List<SysUserCheckins> selectCheckinsList(SysUserCheckins checkins);

    /**
     * 通过打卡记录ID查询打卡记录
     * 
     * @param id 打卡记录ID
     * @return 打卡记录对象
     */
    SysUserCheckins selectCheckinsById(Long id);

    /**
     * 新增打卡记录
     * 
     * @param checkins 打卡记录对象
     * @return 结果
     */
    int insertCheckins(SysUserCheckins checkins);

    /**
     * 修改打卡记录
     * 
     * @param checkins 打卡记录对象
     * @return 结果
     */
    int updateCheckins(SysUserCheckins checkins);

    /**
     * 删除打卡记录
     * 
     * @param id 打卡记录ID
     * @return 结果
     */
    int deleteCheckinsById(Long id);

    /**
     * 批量删除打卡记录
     * 
     * @param ids 打卡记录ID数组
     * @return 结果
     */
    int deleteCheckinsByIds(Long[] ids);

    /**
     * 获取附近打卡地点
     * 
     * @param lat 纬度
     * @param lng 经度
     * @param meter 距离范围(米)
     * @return 打卡地点列表
     */
    List<CheckinVO> selectNearbyCheckins(BigDecimal lat, BigDecimal lng, int meter);

    /**
     * 查询用户今日是否已签到
     * 
     * @param userId 用户ID
     * @param today 今日日期
     * @return 打卡记录数量
     */
    int selectTodayCheckinCount(Long userId, String today);

    /**
     * 查询用户连续签到天数
     * 
     * @param userId 用户ID
     * @return 连续签到天数
     */
    int selectContinuousDays(Long userId);

    /**
     * 查询用户上月获得的积分总和
     * 
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 积分总和
     */
    int selectSumPointsLastMonth(Long userId, String startDate, String endDate);

    Long checkinDays(Long userId);

    Long travelCheckinCount(Long userId);
}




